#include<cmath>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#define re register int
#define inf 0x3f3f3f3f
using namespace std;
inline int read(){
	int x=0,w=1;
	char ch=getchar();
	while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
	if(ch=='-') w=-1,ch=getchar();
	while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-48,ch=getchar();
	return x*w;
}
int f[1001][1001][2],m,x,k;
char g[1001][1001][2];
void chk(int x,int y) {
    if(x==1&&y==1) return;
    if(g[x][y][k]) chk(x-1,y),putchar('D');
    else chk(x,y-1),putchar('R');
//g=1往下走,g=0往右走
}
int main() {
    int i;m=read();
    memset(f,0,sizeof(f));
    for(i=2;i<=m;i++) f[i][0][0]=f[0][i][0]=f[i][0][1]=f[0][i][1] = inf;
    for(int i=1;i<=m;i++) {
        for(int j=1;j<=m;j++){
            k=read();
            if(!k) x=i;
            else{
                while(k%2==0) ++f[i][j][0],k/=2;
                while(k%5==0) ++f[i][j][1],k/=5;
            }
            for(k=0;k<2;k++){
                if(g[i][j][k]=f[i-1][j][k]<f[i][j-1][k]) f[i][j][k]+=f[i-1][j][k];    //记下路径
                else f[i][j][k]+=f[i][j-1][k];
            }
        }
    }
    k=f[m][m][1]<f[m][m][0];
    if(x&&f[m][m][k]>1){      //有0且(2,5)的对数大于1
        cout<<"1\n";
        for(i=2;i<=x;i++) putchar('D');
        for(i=2;i<=m;i++) putchar('R');
        for(i=x+1;i<=m;i++) putchar('D');
    }
    else{
        cout<<f[m][m][k]<<endl;
        chk(m,m);    //路径
    }
    return 0;
}

/*
10
10 8 6 5 9 8 2 5 3 2
3 1 8 6 8 10 5 5 7 8
5 9 7 7 4 9 7 2 5 2
5 9 9 5 4 2 6 6 8 1
10 6 9 9 10 5 6 3 5 9
6 7 10 3 1 4 3 6 7 6
10 10 4 7 4 4 8 6 7 4
10 5 8 2 2 7 4 4 1 4
8 4 6 10 10 6 1 3 3 1
9 9 7 2 9 5 1 8 6 3
*/

/*
3
4 10 5
10 9 4
6 5 3
*/